package com.xiaoshuidi.cloud.module.iot.service;

import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.iot.controller.admin.report.vo.WaterElectricityReportReq;
import com.xiaoshuidi.cloud.module.iot.controller.admin.report.vo.WaterElectricityReportResp;
import com.xiaoshuidi.cloud.module.iot.dal.pojo.TbDeviceDosageDo;
import com.xiaoshuidi.cloud.module.iot.vo.BaseExportResp;
import org.springframework.scheduling.annotation.Async;

/**
 * @Author Feng
 * @date 2023/9/21
 */
public interface WaterElectricityReportService {

    /**
     * 插入报表数据（峰谷电专用）
     *
     * @param roomId        房间编号
     * @param deviceNo      设备编号
     * @param thirdDeviceNo 第三方设备编号
     * @param deviceType    水电费类型
     * @param tenantId      租户编号,取设备内的值
     * @param amount        金额
     * @param startReading  开始读数
     * @param endReading    结束读数
     * @param peakValleyType 峰谷电类型 PeakValleyEnum
     * @return
     */
    boolean save4PeakValley(Long roomId, String deviceNo, String thirdDeviceNo, String deviceType, Long tenantId, Double amount, Double startReading, Double endReading, String peakValleyType);

    /**
     * 插入报表数据
     *
     * @param roomId        房间编号
     * @param deviceNo      设备编号
     * @param thirdDeviceNo 第三方设备编号
     * @param dosageDo      读数信息
     * @param deviceType    水电费类型
     * @param tenantId      租户编号,取设备内的值
     * @return
     */
    boolean save(Long roomId, String deviceNo, String thirdDeviceNo, TbDeviceDosageDo dosageDo, String deviceType, Long tenantId);

    /**
     * 分页列表
     *
     * @param req
     * @return
     */
    PageResult<WaterElectricityReportResp> page(WaterElectricityReportReq req);

    /**
     * 水电明细 - 导出
     *
     * @param req
     * @return
     */
    @Async("waterElectricityReportExecutor")
    void export(WaterElectricityReportReq req, String key);
}
